#include <stdio.h>
#include <stdlib.h>

#include "crypto/types.h"
#include "crypto/bignum.h"

int main()
{
    // char *a = "123121234325";
    // BN *bn = BNbuild(a, 0);
    // BNprint(bn);
    // char *b = "000000000123121234325";
    // bn = BNbuild(b, 0);
    // BNprint(bn);
    // char *c = "+000000000123121234325";
    // bn = BNbuild(c, 0);
    // BNprint(bn);
    // char *d = "-000000000123121234325";
    // bn = BNbuild(d, 0);
    // BNprint(bn);
    // char *e = "-123121234325";
    // bn = BNbuild(e, 0);
    // BNprint(bn);

    // char *a = "88888888888";
    // BN *ba = BNbuild(a, 0);
    // char *b = "2222222222222";
    // BN *bb = BNbuild(b, 0);
    // BNprint(ba);
    // BNprint(bb);
    // BN bc;
    // bc.num = NULL;
    // BNadd(ba, bb, &bc);
    // BNprint(&bc);

    // char *a = "0";
    // BN *ba = BNbuild(a, 0);
    // BNprint(ba);

    // char *a = "88888888888";
    // BN *ba = BNbuild(a, 0);
    // char *b = "2222222222222";
    // BN *bb = BNbuild(b, 0);
    // BNprint(ba);
    // BNprint(bb);
    // BN *bc = BNinit(0);
    // bc->num = NULL;
    // BNsub(ba, bb, bc);
    // BNprint(bc);

    // BN *ba = BNBuildInt(12);
    // BN *bb = BNBuildInt(-12);

    // BNprint(ba);
    // BNprint(bb);

    // BN *bc = BNinit(0);

    // BNadd(ba, bb, bc);
    // BNprint(bc);
    // BNsub(ba, bb, bc);
    // BNprint(bc);
    // BNmulti(ba, bb, bc);
    // BNprint(bc);

    // BN *ba = BNBuildInt(-1);
    // bool mod;

    // BN *bb = BNinit(0);

    // BNhalf(ba, bb, &mod);
    // BNprint(bb);
    // printf("%d\n", mod);
    // mod = mod ? false : true;
    // printf("%d\n", mod);
    // BNhalf(ba, bb, &mod);
    // BNprint(bb);
    // printf("%d\n", mod);
    BN *ba = BNbuildInt(12);
    BN *bb = BNbuildInt(4);

    BN *bc = BNinit(0);
    BNpow(ba, bb, bc);
    BNprint(bc);

    return 0;
}